#ifndef HEADER_BALLE
#define HEADER_BALLE

#include "vec2D.h"
#include "blob.h"
#include <math.h>
#include <iostream>

class Balle
{
	public:
		//! Constructeur par défaut
		Balle();

		//! Constructeur paramétré
		Balle(const vec2D c, const float r);

		//! Fonction d'initialisation, substitut au constructeur paramétré
		void init(const vec2D c, const float r);

		//! Initialise la balle par copie
		void copy(Balle & b);

		//! Renvoie les coordonnées du centre
		vec2D& getCentre();

		//! Renvoie le rayon de la balle
		float getRayon();

		//! Renvoie le vecteur direction de la balle
		vec2D getDirection();

		//! Renvoie le vecteur vitesse de la balle
		vec2D getVitesse();

		//! Change le centre
		void setCentre(const vec2D &c);

		//! Change le vecteur direction
		void setDirection(const vec2D &d);

		//! Change le vecteur vitesse
		void setVitesse(const vec2D &v);

		//! Change le vecteur direction en fonction de la normale donnée
		void changeDirection(const vec2D normal);

		//! Convertit les radians en degrés
		float radToDeg(const float angle);

		//! Ajoute une force au mouvement de la balle
		void ajouteForce(vec2D force);

		//! Met à jour la position, la vitesse et l'accélération
		void update(const float delta);

		//! Gère les rebonds sur les bords
		void rebond();

		//! Gère les renvois par les blobs
		void renvoiBlob(Blob & b);

	private:
		//! Centre (position) de la balle
		vec2D centre;

		//! Rayon
		float rayon;

		//! Direction
		vec2D direction;

		//! Masse
		float masse;

		//! Vitesse
		vec2D vitesse;

		//! Accélération
		vec2D accel;
};

#endif
